package ar.com.algotres.tpdos.model.juego;

import ar.com.algotres.tpdos.exceptions.NivelInexistenteException;
import ar.com.algotres.tpdos.model.fisica.Velocidad;
import ar.com.algotres.tpdos.model.mapas.FabricaMapas;
import ar.com.algotres.tpdos.model.mapas.Mapa;

public class Nivel {
	
	private static final Integer CANTIDAD_AVIONES_A_ATERRIZAR_NIVEL_1 = 5;
	private static final Integer CANTIDAD_AVIONES_A_ATERRIZAR_NIVEL_2 = 8;
	private static final Integer CANTIDAD_AVIONES_A_ATERRIZAR_NIVEL_3 = 10;
	private static final Integer FACTOR_APARICION_NIVEL_1 = 0;
	private static final Integer FACTOR_APARICION_NIVEL_2 = 1;
	private static final Integer FACTOR_APARICION_NIVEL_3 = 2;
	private static final Integer VELOCIDAD_NIVEL_1 = 1;
	private static final Integer VELOCIDAD_NIVEL_2 = 2;
	private static final Integer VELOCIDAD_NIVEL_3 = 3;

	private Integer numero;
	private Mapa mapa;
	private Integer cantidadAvionesAAterrizar;
	private Velocidad velocidad;
	private Integer factorAparicion;
	
	
	public Nivel(Integer numero){
		this.numero = numero;
		
		if (numero.intValue() == 1){
			cantidadAvionesAAterrizar = CANTIDAD_AVIONES_A_ATERRIZAR_NIVEL_1;
			factorAparicion = FACTOR_APARICION_NIVEL_1;
			velocidad = new Velocidad(VELOCIDAD_NIVEL_1);
			mapa = FabricaMapas.getMapaNivel1();
		} else if (numero.intValue() == 2){
			cantidadAvionesAAterrizar = CANTIDAD_AVIONES_A_ATERRIZAR_NIVEL_2;
			factorAparicion = FACTOR_APARICION_NIVEL_2;
			velocidad = new Velocidad(VELOCIDAD_NIVEL_2);
			mapa = FabricaMapas.getMapaNivel2();
		} else if (numero.intValue() == 3){
			cantidadAvionesAAterrizar = CANTIDAD_AVIONES_A_ATERRIZAR_NIVEL_3;
			factorAparicion = FACTOR_APARICION_NIVEL_3;
			velocidad = new Velocidad(VELOCIDAD_NIVEL_3);
			mapa = FabricaMapas.getMapaNivel3();
		} else {
			throw new NivelInexistenteException("No existe un nivel con el numero "+numero.toString());
		}
	}
	
	public Integer getNumero() {
		return numero;
	}
	public Mapa getMapa() {
		return mapa;
	}
	public Integer getCantidadAvionesAAterrizar() {
		return cantidadAvionesAAterrizar;
	}

	public Integer getFactorAparicion() {
		return factorAparicion;
	}

	public Velocidad getVelocidad() {
		return velocidad;
	}
	
}
